IntelliJ Platform/AIA Extensibility.ipynb (134 lines of code) (raw):

{ "cells": [ { "metadata": {}, "cell_type": "markdown", "source": [ "# AI Assistant Extensibility\n", "\n", "This notebook presents how to extend the AI Assistant plugin in the runtime by providing a custom message handler." ] }, { "metadata": {}, "cell_type": "code", "source": "%use intellij-platform", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "markdown", "source": "Load the AI Assistant bundled plugin using its `com.intellij.ml.llm` ID." }, { "metadata": {}, "cell_type": "code", "source": "loadPlugins(\"com.intellij.ml.llm\")", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "import com.intellij.ml.llm.agents.ChatAgent\n", "import com.intellij.ml.llm.core.chat.messages.ChatMessage\n", "import com.intellij.ml.llm.core.chat.messages.UserMessage\n", "import com.intellij.ml.llm.core.chat.messages.impl.SimpleCompletableMessage\n", "import com.intellij.ml.llm.core.chat.session.ChatKind\n", "import com.intellij.ml.llm.core.chat.session.ChatMessageHandler\n", "import com.intellij.ml.llm.core.chat.session.ChatSession\n", "import com.intellij.ml.llm.smartChat.endpoints.SmartChatEndpoint\n", "import com.intellij.openapi.application.ApplicationManager\n", "import com.intellij.openapi.extensions.ExtensionPointName\n", "import com.intellij.openapi.project.Project\n", "\n", "class MyChatMessageHandler : ChatMessageHandler {\n", " override fun isApplicable(project: Project, kind: ChatKind, userMessage: UserMessage) = true\n", "\n", " override fun createAnswerMessage(\n", " project: Project,\n", " chat: ChatSession,\n", " userMessage: UserMessage,\n", " kind: ChatKind,\n", " ) = SimpleCompletableMessage(chat)\n", "\n", " override suspend fun serveAnswerMessage(\n", " project: Project,\n", " chat: ChatSession,\n", " answerMessage: ChatMessage,\n", " smartChatEndpoints: List<SmartChatEndpoint>,\n", " ) {\n", " ChatAgent.EP_NAME.extensionList\n", " .find { it.id == \"groot\" }\n", " ?.serveAnswerMessage(project, chat, answerMessage)\n", " }\n", "}\n", "\n", "registerExtension(ChatMessageHandler.EP, MyChatMessageHandler())" ], "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "import com.intellij.ml.llm.agents.ChatAgent\n", "import com.intellij.ml.llm.core.chat.messages.ChatMessage\n", "import com.intellij.ml.llm.core.chat.messages.impl.SimpleCompletableMessage\n", "import com.intellij.ml.llm.core.chat.session.ChatSession\n", "import com.intellij.ml.llm.privacy.trustedStringBuilders.privacyConst\n", "import com.intellij.openapi.project.Project\n", "\n", "class MyChatAgent : ChatAgent {\n", "\n", " override val id = \"groot\"\n", " override val name = \"I am Groot\"\n", "\n", " override fun createAnswerMessage(\n", " project: Project,\n", " chat: ChatSession,\n", " userMessage: UserMessage,\n", " kind: ChatKind,\n", " ) = SimpleCompletableMessage(chat)\n", "\n", " override suspend fun serveAnswerMessage(\n", " project: Project,\n", " chat: ChatSession,\n", " answerMessage: ChatMessage,\n", " ) {\n", " answerMessage as SimpleCompletableMessage\n", " answerMessage.appendText(\"*I am Groot*\".privacyConst)\n", " }\n", "}\n", "\n", "registerExtension(ChatAgent.EP_NAME, MyChatAgent())" ], "outputs": [], "execution_count": null } ], "metadata": { "kernelspec": { "display_name": "Kotlin", "language": "kotlin", "name": "kotlin" }, "language_info": { "name": "kotlin", "version": "1.9.23", "mimetype": "text/x-kotlin", "file_extension": ".kt", "pygments_lexer": "kotlin", "codemirror_mode": "text/x-kotlin", "nbconvert_exporter": "" }, "ktnbPluginMetadata": { "sessionRunMode": "IDE_PROCESS" } }, "nbformat": 4, "nbformat_minor": 0 }